使用情境:
爲了提高程序性能,在Ruby 3中,字符串字面量在所有文件中默認被凍結。
爲了過渡,Ruby2.3 增加了一個註釋:
#frozen_string_literal: true
如何使用:
它告訴Ruby,文件中的所有字符串字面量都被隱式凍結,不可修改,就像每一個字符串都調用了 freeze 方法一樣。
# frozen_string_literal: true
s = "string"
puts s.frozen? => true
s << "12" => can't modify frozen String (RuntimeError)
使用方式:
--enable=frozen-string-literal
標誌運行 ruby,也會默認凍結所有文件中的字符串字面量。在單個文件中可以通過# frozen_string_literal: false
覆蓋全局設置(Ruby 3中也可以用此方式覆蓋全局設置)。ruby --enable=frozen-string-literal t.rb
如何修改:
如果想要修改字符串字面量怎麼辦?
無論全局或每個文件如何設置,可以使用一元+運算符(注意優先級)來產生非凍結字符串或調用dup方法來對其進行復制:
# frozen_string_literal: true
"".frozen?
=> true
(+"").frozen?
=> false
"".dup.frozen?
=> false
還可以使用一元-運算符凍結可變(未凍結)字符串。
(-"").frozen?
=> true